package fr.lille1.wordcount.service;
import java.util.List;
import java.util.Map;


/**
 * Interface de service metier pour le wordcount
 * @author RAKOTOBE Sitraka Eric
 */
public interface IWordCountService {

   /**
    * Compter le nombre d'occurences de chaque mot dans un 
    * texte passé en paramètre depuis un text brut
    * @param text : le texte dont on voudra compter l'occurence de chaque mot
    * @return map contenant pour chaque mot son occurence dans un texte
    */
    Map<String, Integer> countAllWordInText(String text);

    
    
   /**
    * Compter le nombre d'occurences de chaque mot dans un 
    * texte passé en paramètre depuis une URL
    * @param urlPath : le chemin vers le fichier contenant le texte
    * @return map contenant pour chaque mot son occurence dans le fichier d'url en parametre
    */
    Map<String, Integer> countAllWordInUrl(String urlPath);    
    
    
   /**
    * Compter le nombre d'occurences d'un mot particulier dans un
    * texte passé en paramètre 
    * depuis un text brut
    * @param word : le mot dont on voudra compter le nombre d'occurence
    * @param text : le texte dans lequel on voudra compter le nombre d'occurence d'un mot
    * @return le nombre d'occurences du mot en parametre
    */
    int countOneWordInText(String word , String text);
    
    
   /**
    * Compter le nombre d'occurences d'un mot particulier dans un texte passé en paramètre 
    * depuis une URL
    * @param word : le mot dont on voudra compter le nombre d'occurence
    * @param urlPath  : le chemin vers le fichier contenant le texte
    * @return le nombre d'occurences du mot dont le fichier texte dont l'url est en parametre
    */
    int countOneWordInUrl(String word , String urlPath);    


   /**
    * Déterminer si un mot particulier est présent dans un texte passé en paramètre
    * @param word : le mot en question
    * @param text : le texte en question
    * @return predicat pour savoir si un mot est present dans un texte
    */
    boolean isWordInText(String word , String text);

    
   /**
    * Retourner la liste des n mots les plus fréquents dans un texte 
    * et qui ne sont pas dans une liste de mots courants (passée en paramètre)
    * @param text : le texte dans lequel on extraira la liste des mots
    * @param stringValueOfList : la liste des mots courants a exclure (cette liste sera de la forme "v1||v2||v3" et sera 
    * convertie en liste par la methode)
    * @param n : le nombre de mots voulu (=taille de la liste a retourner)
    * @return la liste des n mots les plus frequents et qui ne sont pas dans une liste de mots courants
    */
    List<String> getAllFrequentWordsInText(String text, String stringValueOfList , int n);

}
